//package com.ruoyi.oar.api.util;
//
//import com.ruoyi.common.exception.ServiceException;
//import com.ruoyi.common.utils.sign.Base64;
//
//import java.io.ByteArrayInputStream;
//import java.io.ByteArrayOutputStream;
//import java.io.File;
//import java.io.IOException;
//
//
//public class PicUtils {
//
//    public static void main(String[] args) throws IOException {
//        byte[] bytes = FileUtils.readFileToByteArray(new File("D:\\图片\\微信图片_20211206141915.jpg"));
//        long l = System.currentTimeMillis();
//        bytes = PicUtils.compressPicForScale(bytes, 300);// 图片小于300kb
//        System.out.println( Base64.encode(bytes));
//
//        System.out.println(System.currentTimeMillis() - l);
//        FileUtils.writeByteArrayToFile(new File("D:\\图片\\压缩.jpg"), bytes);
//    }
//
//    /**
//     * 根据指定大小压缩图片
//     *
//     * @param imageBytes  源图片字节数组
//     * @param desFileSize 指定图片大小，单位kb
//     * @return 压缩质量后的图片字节数组
//     */
//    public static byte[] compressPicForScale(byte[] imageBytes, long desFileSize) {
//        if (imageBytes == null || imageBytes.length <= 0 || imageBytes.length < desFileSize * 1024) {
//            return imageBytes;
//        }
//        long srcSize = imageBytes.length;
//        double accuracy = getAccuracy(srcSize / 1024);
//        try {
//            byte[] result = imageBytes;
//            //设置最高循环次数
//            for (int i = 1; i < 21; i++) {
//                result = compressPicForScale(result, accuracy);
//                if (result.length < desFileSize * 1024) {
//                    log.info("【图片压缩】 图片原大小={}kb | 压缩后大小={}kb  | 压缩次数={}次", srcSize / 1024, result.length / 1024, i);
//                    break;
//                }
//            }
//            if (result.length < desFileSize * 1024) {
//                return result;
//            } else {
//                throw new Exception("图片压缩失败，请重试。");
//            }
//        } catch (Exception e) {
//            log.error("【图片压缩】msg=图片压缩失败!", e);
//            throw new ServiceException("上传图片异常:" + e.getMessage());
//        }
//
//    }
//
//
//    private static byte[] compressPicForScale(byte[] imageBytes, double accuracy) throws IOException {
//        ByteArrayInputStream inputStream = new ByteArrayInputStream(imageBytes);
//        ByteArrayOutputStream outputStream = new ByteArrayOutputStream(imageBytes.length);
//        Thumbnails.of(inputStream)
//                .scale(accuracy)
//                .outputQuality(accuracy)
//                .toOutputStream(outputStream);
//        return outputStream.toByteArray();
//    }
//
//
//    /**
//     * 自动调节精度(经验数值)
//     *
//     * @param size 源图片大小
//     * @return 图片压缩质量比
//     */
//    private static double getAccuracy(long size) {
//        double accuracy;
//        if (size < 900) {
//            accuracy = 0.6;
//        } else if (size < 2047) {
//            accuracy = 0.5;
//        } else if (size < 3275) {
//            accuracy = 0.4;
//        } else {
//            accuracy = 0.3;
//        }
//        return accuracy;
//    }
//
//}
